package com.lanou.bookstore.book.web.servlet.admin;

import com.lanou.bookstore.book.domain.Book;
import com.lanou.bookstore.book.service.BookService;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

@WebServlet("/adminAddBook")
public class AdminAddBookServlet extends HttpServlet {
    private BookService bookService = new BookService();

    private static final long serialVersionUID = 1L;

    @Override

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //判断上传表单是否为multipart/form-data类型
        if (ServletFileUpload.isMultipartContent(request)) {
            //1. 创建DiskFileItemFactory对象，设置缓冲区大小和临时文件目录
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //System.out.println(System.getProperty("java.io.tmpdir"));//默认临时文件夹

            //2. 创建ServletFileUpload对象，并设置上传文件的大小限制。
            ServletFileUpload sfu = new ServletFileUpload(factory);
            sfu.setSizeMax(10 * 1024 * 1024);//以byte为单位    不能超过10M  1024byte = 1kb  1024kb=1M 1024M = 1G
            sfu.setHeaderEncoding("utf-8");

            //3. 调用ServletFileUpload.parseRequest方法解析request对象，得到一个保存了所有上传内容的List对象。
            List<FileItem> fileItemList = null;
            try {
                fileItemList = sfu.parseRequest(request);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            Iterator<FileItem> fileItems = fileItemList.iterator();

            List<String> stringList = new ArrayList<>();
            File file = null;
            String newFileName = "";
            String fileName = "";
            //4. 遍历list，每迭代一个FileItem对象，调用其isFormField方法判断是否是上传文件
            while (fileItems.hasNext()) {
                FileItem fileItem = fileItems.next();
                //普通表单元素
                if (fileItem.isFormField()) {
                    String name = fileItem.getFieldName();//name属性值
                    String value = fileItem.getString("utf-8");//name对应的value值

//                    System.out.println(name + " = " + value);
                    stringList.add(value);
//                    System.out.println("stringListsize:" + stringList.size());
                }
                //<input type="file">的上传文件的元素
                else {
                    fileName = fileItem.getName();//文件名称
//                    System.out.println("原文件名：" + fileName);//Koala.jpg

                    String suffix = fileName.substring(fileName.lastIndexOf('.'));
//                    System.out.println("扩展名：" + suffix);//.jpg

                    //新文件名（唯一）
                    newFileName = new Date().getTime() + suffix;
//                    System.out.println("新文件名：" + newFileName);//image\1478509873038.jpg

                    //5. 调用FileItem的write()方法，写入文件
                    file = new File(request.getServletContext().getRealPath("/book_img") + "\\" + newFileName);
//                    System.out.println(file.getAbsolutePath());
                    try {
                        fileItem.write(file);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    //6. 调用FileItem的delete()方法，删除临时文件
                    fileItem.delete();

                }
            }
            Book book = new Book();
            book.setBname(stringList.get(0));
            book.setPrice(Double.valueOf(stringList.get(1)));
            book.setAuthor(stringList.get(2));
            book.setImage("book_img/" + newFileName);
            book.setCid(stringList.get(3));
            bookService.addBook(book);
//            request.setAttribute("msg", "image_name" + fileName + " " + "image_path" + newFileName);
//            request.getRequestDispatcher("/adminjsps/admin/msg.jsp").forward(request, response);
            response.sendRedirect("/adminBook");
        }

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
